![]() | MÓNADAS |
〈( M=a → a=(M=b) → M=b )〉
M
produce a
(o una expresión M
se evalúa como a
) y si a
produce una computación que produce b
, entonces la computación M
produce b
.
〈( (fmap f x) = ( [f([x↓])] ) )〉
f
se aplica a cada uno de los componentes de x
)
〈( f(x) = x*x )〉)
(a = (1 2 3 4))
(fmap f a) // ev. (1 4 9 16)
〈( f(x) = (x x+10)↓ )〉
(a = (1 2 3 4))
(fmap f a) // ev. (1 11 2 12 3 13 4 14)
〈( f(n) = ((n n) (n+1 n+2))↓ )〉
(x = (1 2 3 4))
(fmap f x) // ev.
((1 1) (2 3) (2 2) (3 4) (3 3) (4 5) (4 4) (5 6))
〈( f1(n) = 2*n )〉
〈( f2(n) = n*n )〉
〈( f3(n) = n+100 )〉
〈( T(n) = f3(f2(f1(n))) )〉
T(5) // ev. 200
〈( fοg = g(f) )〉
(composición de funciones) 〈( (fοg)οh ≡ fο(gοh) )〉
.
(sqrt(r) ο sumar5(r))
(sumar5(sqrt(r)))
,
〈( sumar5(r) = r+5 )〉
.
sqrt(r)
devuelve la raíz cuadrada de r
si es r>0
o el texto “error”
si r<0
. La función siguiente debe chequear primero, antes de aplicarla, que el resultado de la función anterior es un número y no un mensaje de error. Si detecta el mensaje de error, su respuesta debe ser también el mismo mensaje de error. La nueva función sería:
(sumar5(r) ← r≥0 →' "error")
〈( (M(f(r)) = (f(r) ← r≥0 →' "error") )〉
(sqrt(r) ο M(sumar5(r)))
Mónada | Descripción |
Maybe | Computaciones que pueden retornar o no un resultado |
Identity | Mónada identidad |
[] (List) | Computaciones que retornan múltiples resultados |
IO | Computaciones que realizan Entrada/Salida |
Error | Computaciones que pueden fallar o producir excepciones |
State | Computaciones que mantienen el estado |
Reader | Computaciones que leen datos |
Writer | Computaciones que escriben datos |
Cont | Computaciones que pueden interrumpirse o reiniciarse |